﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.IO;
using System.Xml;

namespace VsSourceCpoy.Helper
{
    public class XmlHelper
    {
        //public static XElement GetElement(string fileName, string elementName)
        //{
        //    if (string.IsNullOrEmpty(elementName))
        //    {
        //        throw new ArgumentNullException(elementName);
        //    }
        //    XmlTextReader textReader = new XmlTextReader(fileName);
        //    return FindElement(textReader, elementName, null, null);
        //}

        //private static XElement FindElement(XmlReader reader, string elementName, string attribute, string attValue)
        //{
        //    while (reader.Read())
        //    {
        //        switch (reader.NodeType)
        //        {
        //            case XmlNodeType.Element:
        //                if (reader.Name.Equals(elementName, StringComparison.OrdinalIgnoreCase))
        //                {
        //                    XElement el = XElement.ReadFrom(reader) as XElement;
        //                    if (el != null)
        //                    {
        //                        if (!string.IsNullOrEmpty(attribute) && el.Attributes().Where(at => at.Name == attribute && at.Value == attValue).Count() == 0)
        //                            return null;
        //                        else
        //                            return el;
        //                    }
        //                }
        //                break;
        //        }
        //    }
        //    return null;
        //}

        //private static IEnumerable<XElement> CollectAllElements(string fileName)
        //{
        //    XmlTextReader reader = new XmlTextReader(fileName);
        //    while (reader.Read())
        //    {
        //        switch (reader.NodeType)
        //        {
        //            case XmlNodeType.Element:
        //                XElement el = XElement.ReadFrom(reader) as XElement;
        //                if (el != null)
        //                    yield return el;
        //                break;
        //        }
        //    }
        //}

        //public static IEnumerable<XElement> FindSubElements(XElement element, Func<XElement, bool> filter)
        //{
        //    List<XElement> resList = new List<XElement>();
        //    FindSubElementsInner(element, filter, resList);
        //    return resList;
        //}

        //private static void FindSubElementsInner(XElement element, Func<XElement, bool> filter, List<XElement> res)
        //{
        //    foreach (var item in element.Nodes())
        //    {
        //        if (item.NodeType == XmlNodeType.Element)
        //        {
        //            XElement xElementItme = item as XElement;
        //            if (filter == null || (filter != null && filter(xElementItme)))
        //            {
        //                res.Add(xElementItme);
        //            }
        //            FindSubElementsInner(xElementItme, filter, res);
        //        }
        //    }
        //}

        ///// <summary>
        ///// 
        ///// </summary>
        ///// <param name="fileName"></param>
        ///// <param name="filter">filter为true，则被选择</param>
        ///// <returns></returns>
        //public static IEnumerable<XElement> FindElements(string fileName, Func<XElement, bool> filter)
        //{
        //    if (filter == null)
        //        filter = (x) => true;
        //    var colList = CollectAllElements(fileName).ToList();
        //    return colList.Where(filter);
        //}

        //public static IEnumerable<XElement> FindElements(string fileName, XNamespace nameSpace, string elementName)
        //{
        //    XElement root = XElement.Load(fileName);
        //    if (nameSpace == null)
        //        return root.Elements(elementName);
        //    return root.Elements(nameSpace + elementName);
        //}
    }
}
